package com.SpringAOP.test_1_31_springaop.dynamicProxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class JDKInvocation implements InvocationHandler {
    // 动态代理  要实现这个 InvocationHandler 接口

    // 要有一个目标对象
    private Object target;

    public JDKInvocation(Object target) {
        this.target = target;
    }

    // 所以 JDKInvocation 可以代理任何目标对象
    /**
     * 参数说明
     * proxy：代理对象
     * method：代理对象需要实现的⽅法，即其中需要重写的⽅法
     * args：method所对应⽅法的参数
     */
    // public Object invoke(Object proxy, Method method, Object[] args) throws Throwable;
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("开始代理");
        // 调用目标对象的方法
        // 通过反射来调用
        Object result = method.invoke(target, args); // 动态代理都是基于反射来实现的 , invoke 底层就是通过 反射实现的
        // proxy 是一个目标对象对应此处的 target, args 是
        System.out.println("结束代理");
        return result; // 最后返回
    }


}
